

import random as r#导入随机数模块且命名r

'''
生日悖论指如果一个房间有23人或以上，那么至少有两个人生日相同的概率大于50%。
编写程序，输出在不同随机样本数量下，23个人中至少两个人生日相同的概率。
'''

birthday=[]#保存不同生日的列表
zidian={}#保存人数和概率的字典
shuliang,find=0,0#初始化变量
def jiancha():#创建函数来新建生日和检查是否重合
    global shuliang,birthday#全局两个变量
    for xh in range(people):#循环人数次
        birthday.append(r.randint(1,365))#添加随机数生日
    if len(birthday)!=len(set(birthday)):#如果有重合项
        shuliang+=1#数量加一
    birthday.clear()#清空列表birthday
while find<100:#大于等于100才退出循环
    try:#异常捕获
        find=int(input("要进行多少次检测？数量越高准确度越高但是时间会变长，至少100次否则程序会出错"))#获取次数
        if find<100:#如果find小于100
            raise(ValueError)#抛出异常
    except:#如果异常
        print("请正确输入，查看自己输入格式是否正确及数值是否大于99")#提示
for people in range(1,366):#每一个人数
    for xh2 in range(find):#进行find次检测求平均值
        jiancha()#调用函数
    if people%20==0:#如果可以被20整除
        print("等待进度：",round(people/365*find,2),"%")#安慰进度条
    zidian.setdefault(people,str(shuliang)+"%")#字典添加人数和概率
    shuliang=0#初始化变量
zidian2=str(zidian)#zidian2为zidian的字符串形式
while True:#死循环
    try:#异常捕获
        cha=int(input("请输入房间有多少个人，输出全部请输入"))#询问人数或者全部输出
        if cha==114514:#如果选择全部输出
            print(zidian2[1:-1])#截取字符串来去大括号
            print("冒号前面是人数，冒号后面是概率")#提示语
        else:#如果选择截取
            print(zidian.get(cha,"请输入1到365位"))#输出对应的value，如果没有则提示范围
    except:#如果错误
        print("请输入正确")#提示